//********************************************************************************************************************//
//ORGANIZATION:
//AUTHOR: bpeng(bogers.peng@gmail.com)
//SUMMARY:
//********************************************************************************************************************//
#ifndef NATIVE_SYSTEM_BASE_BOOL_H
#define NATIVE_SYSTEM_BASE_BOOL_H

#ifndef NATIVE_SYSTEM_BASE_OBJECT_H
#include "System/Base/Object.h"
#endif
#ifndef NATIVE_SYSTEM_BASE_EQUALTO_H
#include "System/Base/EqualTo.h"
#endif

namespace Native { namespace System
{
    //****************************************************************************************************************//
    //CBool
    //
    //****************************************************************************************************************//
    class NATIVE_LIBRARY_EXPORT CBool :
        public CObject,
        public IEqualTo<CBool>
    {
        NATIVE_DECLARE_OBJECT;

        NATIVE_DECLARE_PROPERTY(public, public, bool, Value, _value);

    public:
        CBool();
        CBool(const CBool& that);
        CBool(const CBool&& that);
        CBool(bool value);
        CBool(WSTRING& value) throw();
        //CObject
        virtual wstring ToString() const;
        //IEqualTo
        virtual bool operator==(const CBool& rvalue) const;
        virtual bool operator!=(const CBool& rvalue) const;

        const CBool& operator=(const CBool& rvalue);
        const CBool& operator=(bool rvalue);
    };
}}

#endif